#ifndef _MY_BMP_TEST_H
#define _MY_BMP_TEST_H


/**** BMP文件头数据结构 ****/
typedef struct {
    unsigned char type[2];      //文件类型
    unsigned int size;          //文件大小
    unsigned short reserved1;   //保留字段1
    unsigned short reserved2;       //保留字段2
    unsigned int offset;        //到位图数据的偏移量
} __attribute__ ((packed)) bmp_file_header;

/**** 位图信息头数据结构 ****/
typedef struct {
    unsigned int size;          //位图信息头大小
    int width;                  //图像宽度
    int height;                 //图像高度
    unsigned short planes;          //位面数
    unsigned short bpp;         //像素深度 
    unsigned int compression;   //压缩方式
    unsigned int image_size;    //图像大小
    int x_pels_per_meter;       //像素/米
    int y_pels_per_meter;       //像素/米 
    unsigned int clr_used;
    unsigned int clr_omportant;
} __attribute__ ((packed)) bmp_info_header;


typedef struct 
{
    unsigned int lcd_w;
    unsigned int lcd_h;
    unsigned int lcd_linelen;//一行数据的字节数;//在lcd_init和bmp_show中用到
    unsigned int totallen; //lcd 缓存总共的字节数
    int lcd_byte_depth;
    unsigned short *lcd_buf;////mmap()之后得到的新空间,//在lcd_init和bmp_show中用到
}Lcd_info;

//IMX6ull 野火屏的屏幕信息
#define YEHUO_LCD_W     800
#define YEHUO_LCD_H     480
#define YEHUO_LCD_BYTE_DEPTH    2
#define YEHUO_LCD_TOTALLEN      ((YEHUO_LCD_W)*(YEHUO_LCD_H)*(YEHUO_LCD_BYTE_DEPTH))



//最初的版本（2023-9）
int lcd_init(void);
//int lcd_getbmpinfo(char *path); 
//void bmp_show(int off);

//修改后的版本（2024-1）
int lcd_getbmpinfo(char *path, int *fpic, int *pic_w, int *pic_h, int *byte_depth);
void bmp_show(int fpic, int off, int start_x, int start_y, int pic_w, int pic_h, int byte_depth);
void lcd_showbmp_api(char *str, int start_x, int start_y, int flag);


//学习大佬的版本：（2024-1）
void lcd_showbmp_withcheck_api(char* bmpName,int loca_x,int loca_y);

#endif 